<script>
  // 输入：扁平数组，有父子关系
  //   const flatArray = [
  //     { id: 1, name: '根节点', parentId: null },
  //     { id: 2, name: '子节点1', parentId: 1 },
  //     { id: 3, name: '子节点2', parentId: 1 },
  //     { id: 4, name: '孙子节点', parentId: 2 },
  //   ];

  //   function arrayToTree(arr, parentId = null) {
  //     // 找到当前父节点的子节点
  //     const children = arr.filter((item) => item.parentId === parentId);
  //     // console.log(children);
  //     return children.map((item) => {
  //       return {
  //         id: item.id,
  //         children: arrayToTree(arr, item.id), // 递归将当前的节点作为新的父节点
  //       };
  //     });
  //   }
  //   const result = arrayToTree(flatArray, null);
  //   console.log('result', result);

  // 第一次调用：[{id: null,chidren: arrayToTree(flatArray,1)}]
  // arrayToTree(flatArray,1)的结果: [{ id: 2, chidren: arrayToTree(flatArray,2) },{ id: 3, children: arrayToTree(flatArray,3) }]
  // arrayToTree(flatArray,2)的结果：[{id: 4,children: arrayToTree(flatArray,4)}] ==> [{id: 4,children: []]
  // 递归结束 --》一步一步往上返回结果
  // 返回arrayToTree(flatArray,4)[{id: 4,children: []]
  // 返回arrayToTree(flatArray,2) [{id: 2,children: [{id: 4,children: []]}]
  // 返回arrayToTree(flatArray,3) [{id: 3,chidren: []}];
  //  返回arrayToTree(flatArray,1): [{id: 1,chidren: [{id: 2,children: [{id: 4,children: []]},{id: 3,chidren: []}]}]
  // 返回arrayToTree(flatArray,null):
  //     {
  //       "id": 1,
  //       "children": [
  //           {
  //               "id": 2,
  //               "children": [
  //                   {
  //                       "id": 4,
  //                       "children": []
  //                   }
  //               ]
  //           },
  //           {
  //               "id": 3,
  //               "children": []
  //           }
  //       ]
  //   }

  // 输入：嵌套数组
  const nestedArray = [1, [2, [3, 4]], 5];
  // 输出：树形对象
  //   const tree = {
  //     value: null,
  //     children: [
  //       { value: 1, children: [] },
  //       {
  //         value: null,
  //         children: [
  //           { value: 2, children: [] },
  //           {
  //             value: null,
  //             children: [
  //               { value: 3, children: [] },
  //               { value: 4, children: [] },
  //             ],
  //           },
  //         ],
  //       },
  //       { value: 5, children: [] },
  //     ],
  //   };

  function arrayToTreeStructure(arr) {
    if (arr.length === 0) {
      return {
        value: null,
        children: [],
      };
    }
    const chidren = arr.map((item) => {
      if (Array.isArray(item)) {
        // 是数组就递归
        return arrayToTreeStructure(item);
      } else {
        // 不是数组 就说明是叶子节点
        return {
          value: item,
          chidren: [],
        };
      }
    });
    return {
      value: null,
      chidren: chidren,
    };
  }

  console.log(arrayToTreeStructure(nestedArray));
</script>
